/**
 * 643. 子数组最大平均数 I
 *
 * 滑动窗口
 *
 * @example 输入：num = [1,12,-5,-6,50,3], k = 4
 * 输出：12.75
 * 解释：最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
 *
 * @see https://leetcode.cn/problems/maximum-average-subarray-i/
 *
 * @param {number[]} num
 * @param {number} k
 */
function findMaxAverage(num: number[], k: number) {
  let maxTotal = 0
  let total = 0

  /**
   * 第一个窗口 求和
   */
  for (let i = 0; i < k; i++) {
    total += num[i]
  }

  /**
   * 暂存 第一个窗口和
   */
  maxTotal = total

  /**
   * 向右移动窗口
   * 此时 窗口和 = 窗口和 + 新进入窗口的原素 - 被移除窗口的原素
   */
  for (let i = k; i < num.length; i++) {
    total = total + num[i] - num[i - k]
    maxTotal = Math.max(total, maxTotal)
  }

  return maxTotal / k
}

console.log(findMaxAverage([1, 12, -5, -6, 50, 3], 4))
